package com.bit.cfdi.web.domain;

import static javax.persistence.GenerationType.IDENTITY;

import java.io.Serializable;
import java.util.Calendar;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Version;

@Entity
@Table(name = "usuario")
public class Usuario implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = -1247676041998854123L;
	
	// Fields
	private Long idUsuario;
	private Persona persona;
	private String email;
	private String password;
	private String passwordToCompareUpdate;
	private Calendar fechaCaducidadPassword;
	private Integer status;
	private String codigoActivacion;
	private Long ultimaModificacionPor;
	private Calendar fechaModificacion;
	
	// Property accessors
	@Id
	@GeneratedValue(strategy = IDENTITY)
	@Column(name = "id_usuario", nullable = false)
	public Long getIdUsuario() {
		return this.idUsuario;
	}

	public void setIdUsuario(final Long idUsuario) {
		this.idUsuario = idUsuario;
	}

	@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
	@JoinColumn(name = "id_persona", nullable = false)
	public Persona getPersona() {
		return this.persona;
	}

	public void setPersona(final Persona persona) {
		this.persona = persona;
	}

	@Column(name = "email", length = 100, unique = true, nullable = false)
	public String getEmail() {
		return this.email;
	}

	public void setEmail(final String email) {
		this.email = email;
	}

	@Column(name = "password", length = 255)
	public String getPassword() {
		return this.password;
	}

	public void setPassword(final String password) {
		this.password = password;
	}
	
	@Column(name = "password_to_compare_update", length = 100)
	public String getPasswordToCompareUpdate() {
		return this.passwordToCompareUpdate;
	}

	public void setPasswordToCompareUpdate(
			final String passwordToCompareUpdate) {
		
		this.passwordToCompareUpdate = passwordToCompareUpdate;
	}

	@Column(name = "fecha_caducidad_password")
	@Temporal(TemporalType.TIMESTAMP)
	public Calendar getFechaCaducidadPassword() {
		return this.fechaCaducidadPassword;
	}

	public void setFechaCaducidadPassword(
			final Calendar fechaCaducidadPassword) {
		
		this.fechaCaducidadPassword = fechaCaducidadPassword;
	}

	@Column(name = "status", length = 10)
	public Integer getStatus() {
		return this.status;
	}

	public void setStatus(final Integer status) {
		this.status = status;
	}
	
	@Column(name = "codigo_activacion", length = 20)
	public String getCodigoActivacion() {
		return codigoActivacion;
	}
	
	public void setCodigoActivacion(final String codigoActivacion) {
		this.codigoActivacion = codigoActivacion;
	}

	@Column(name = "ultima_modificacion_por")
	public Long getUltimaModificacionPor() {
		return this.ultimaModificacionPor;
	}

	public void setUltimaModificacionPor(final Long ultimaModificacionPor) {
		this.ultimaModificacionPor = ultimaModificacionPor;
	}

	@Column(name = "fecha_modificacion")
	@Temporal(TemporalType.TIMESTAMP)
	@Version
	public Calendar getFechaModificacion() {
		return this.fechaModificacion;
	}

	public void setFechaModificacion(final Calendar fechaModificacion) {
		this.fechaModificacion = fechaModificacion;
	}

}